From: Jonny Lamb Date: Thu, 15 Dec 2011 11:24:38 +0000 (+0000) Subject: telepathyClient: only notify on new channels when asked to do so X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~7244 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=69e26c6dee56c6bbedfa0a48d8aecea984f45a40;p=gnome-shell.git telepathyClient: only notify on new channels when asked to do so We need to notify when the channel dispatcher calls HandleChannels on us with a channel we already handle. However, we don't want to notify if we claim a new incoming channel which doesn't actually have anything interesting in it yet. For example, a new channel pops up just to give a delivery notification. We want (or, need) to handle it but don't want to notify for it. Fixes: https://bugzilla.gnome.org/show_bug.cgi?id=666243 Signed-off-by: Jonny Lamb --- diff --git a/js/ui/telepathyClient.js b/js/ui/telepathyClient.js index 9f9d12ebb..90f6b6778 100644 --- a/js/ui/telepathyClient.js +++ b/js/ui/telepathyClient.js @@ -197,11 +197,11 @@ const Client = new Lang.Class({ _handleChannels: function(handler, account, conn, channels, requests, user_action_time, context) { - this._handlingChannels(account, conn, channels); + this._handlingChannels(account, conn, channels, true); context.accept(); }, - _handlingChannels: function(account, conn, channels) { + _handlingChannels: function(account, conn, channels, notify) { let len = channels.length; for (let i = 0; i < len; i++) { let channel = channels[i]; @@ -212,7 +212,18 @@ const Client = new Lang.Class({ continue; } - if (this._tpClient.is_handling_channel(channel)) { + // 'notify' will be true when coming from an actual HandleChannels + // call, and not when from a successful Claim call. The point is + // we don't want to notify for a channel we just claimed which + // has no new messages (for example, a new channel which only has + // a delivery notification). We rely on _displayPendingMessages() + // and _messageReceived() to notify for new messages. + + // But we should still notify from HandleChannels because the + // Telepathy spec states that handlers must foreground channels + // in HandleChannels calls which are already being handled. + + if (notify && this._tpClient.is_handling_channel(channel)) { // We are already handling the channel, display the source let source = this._chatSources[channel.get_object_path()]; if (source) @@ -285,7 +296,7 @@ const Client = new Lang.Class({ Lang.bind(this, function(dispatchOp, result) { try { dispatchOp.claim_with_finish(result); - this._handlingChannels(account, conn, [channel]); + this._handlingChannels(account, conn, [channel], false); } catch (err) { throw new Error('Failed to Claim channel: ' + err); }}));